package com.opcode.nebulamobil.utility;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
public class FileProcess {


	private File file,imageFile;
	private BufferedReader bReader;
	private InputStreamReader inputReader;
	private FileInputStream inputStream;
	
	private BufferedWriter bWriter;
	private FileWriter fWriter;
	private PrintWriter pWriter;
	
	private String readData,buffer="";
	
	private GregorianCalendar calendar;
	private Date date;
	private static String time;
	
	
	/**
	 * G�rsel ��eleri dosyaya yazmak i�in bu yap�land�r�c� ile nesne olu�turulacakt�r.
	 */
	public FileProcess(){
		this.calendar=new GregorianCalendar();
		this.date=new Date();
		this.date=this.calendar.getTime();
		
		SimpleDateFormat dateFormatter = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss");
	    time=dateFormatter.format(date);
	}
	
	/**
	 * Veri dosyalar�n� yazmak i�in bu yap�land�r�c� tercih edilecektir.
	 * @param path
	 */
	public  FileProcess(String path){

		this.file=new File(path);
		
		this.calendar=new GregorianCalendar();
		this.date=new Date();
		this.date=this.calendar.getTime();
		
		SimpleDateFormat dateFormatter = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss");
	    time=dateFormatter.format(date);
	    
		if(this.file.exists()){
			System.out.println("Dosya hali haz�rda bulunuyor.");	
		}else{
			try {
				this.file.createNewFile();
				System.out.println("Dosya olu�turuldu.");
			} catch (IOException e) {
				STSLog.writeLog(e,this.getClass().getCanonicalName(),"Dosya olu�turma esnas�nda hata meydana geldi.");					
			}
		}
	}
	
	
	
	/**
	 * Bu metod FileOperationsConstants s�n�f�nda tan�mlanan dosyaya ba�lant� kurarak dosya i�eri�ini okur.
	 * Okunan de�er buffer nesnesine aktar�larak geriye d�nd�r�l�r.
	 */
	public String reader(){
		this.buffer="";
		try {
			try {
				this.inputStream=new FileInputStream(this.file);
			} catch (FileNotFoundException e) {				
				STSLog.writeLog(e,this.getClass().getCanonicalName(),"Dosyadan okuma yapmak i�in kullan�lacak inputStream nesnesi olu�turulurken, dosya bulunamad��� i�in hata al�nd�.");					
			}
			this.inputReader=new InputStreamReader(this.inputStream);
			this.bReader=new BufferedReader(this.inputReader);
			while((this.readData=this.bReader.readLine())!=null){
				if(this.readData!=null){
					this.buffer=this.buffer+'\n'+this.readData;
				}
			}
		} catch (IOException e) {

			STSLog.writeLog(e,this.getClass().getCanonicalName(),"Dosyadan okuma yap�l�rken hata meydana geldi.");					
		}
		
		try {
			this.bReader.close();
			this.inputReader.close();
			this.inputStream.close();
		} catch (IOException e) {

			STSLog.writeLog(e,this.getClass().getCanonicalName(),"Dosyadan okuma yap�ld�ktan sonra dosya ba�lant�lar� kapat�l�rken hata meydana geldi.");								
		}
		return buffer;
	}
	
	
	
	/**
	 * Bu metod FileOperationsConstants s�n�f�nda tan�mlanan dosyaya ba�lant� kurarak parametre olarak gelen String tipindeki datay� yazar.
	 */
	public void writer(String writeData){
		try {
			this.fWriter=new FileWriter(this.file);
		} catch (IOException e) {
			STSLog.writeLog(e,this.getClass().getCanonicalName(),"Dosyaya veri yazma esnas�nda baglant� hatas� olu�tu.");								
		}
		this.bWriter=new BufferedWriter(this.fWriter);
		
		try {
			this.bWriter.write(writeData);
		} catch (IOException e) {
			STSLog.writeLog(e,this.getClass().getCanonicalName(),"Dosyaya veri yazma hatas� olu�tu.");								
		}
		
		try {
			this.bWriter.flush();
			this.bWriter.close();
			this.fWriter.close();
		} catch (IOException e) {
			STSLog.writeLog(e,this.getClass().getCanonicalName(),"Dosya elemanlar�n� kapatma esnas�nda hata meydana geldi.");								
		}
	}
	
	
	/**
	 * 
	 * @param file
	 * @return
	 */
	public static File[] getContentlist(File file){
		return file.listFiles();
	}
	

	/**
	 * 
	 * @param bitmap
	 */
	public void writeImageToFile(Bitmap bitmap,File file){
		 FileOutputStream outStream;
		 try {
			 outStream = new FileOutputStream(file);
		     bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream); 

		     outStream.flush();
		     outStream.close();
		 } catch (FileNotFoundException e) {
				STSLog.writeLog(e,this.getClass().getCanonicalName(),"Resim dosyası, yazılırken dosya bulunamadı hatası meydana geldi.");								
		 } catch (IOException e) {
				STSLog.writeLog(e,this.getClass().getCanonicalName(),"Resim dosyası, yazılırken dosya baılantısı problemi meydana geldi.");								
		 }
	}
	
	
	/**
	 * 
	 * @return
	 */
	public Bitmap readImageFromFile(File file){
		FileInputStream streamIn;
		Bitmap bitmap = null;
		try {
			streamIn = new FileInputStream(file);
			bitmap = BitmapFactory.decodeStream(streamIn);

		} catch (FileNotFoundException e) {
			STSLog.writeLog(e,this.getClass().getCanonicalName(),"Resim dosyas�, okunurken dosya bulunamad� hatas� meydana geldi.");								
		}
		return bitmap;
	}
	
	
	
	
	public static String getTime(){
		return time;	
	}

	
	public PrintWriter getpWriter() {
		try {
			this.pWriter=new PrintWriter(this.file);
		} catch (FileNotFoundException e) {
			STSLog.writeLog(e,this.getClass().getCanonicalName(),"Prinwriter nesnesi olu�turulurken dosya bulunamad� hatas� meydana geldi.");								
		}
		return pWriter;
	}

}
